diff options
Diffstat (limited to 'src/routes/grocery/[id]/+page.server.ts')
| -rw-r--r-- | src/routes/grocery/[id]/+page.server.ts | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/src/routes/grocery/[id]/+page.server.ts b/src/routes/grocery/[id]/+page.server.ts index 656e19c..dbfecff 100644 --- a/src/routes/grocery/[id]/+page.server.ts +++ b/src/routes/grocery/[id]/+page.server.ts @@ -2,19 +2,18 @@ import { error, fail, redirect } from '@sveltejs/kit'; import { db } from '$lib/server/db'; import { groceries, categories } from '$lib/server/db/schema'; import { eq } from 'drizzle-orm'; -import { loadAll as loadCategories } from '$lib/server/services/categories'; import { - loadForGrocery, - add as addRef, - deleteReference, -} from '$lib/server/services/references'; -import { updateGrocery, deleteGrocery } from '$lib/server/services/groceries'; -import { deleteByIdAction } from '$lib/server/services/grocery-actions'; + categoriesService, + groceriesService, + referencesService, +} from '$lib/server/services'; +import { idAction } from '$lib/server/services/grocery-actions'; import { numericId, parseFormString, parseOptionalNumber, } from '$lib/server/services/validation'; +import { isUniqueViolation } from '$lib/server/db/errors'; import type { Category, Grocery, Reference } from '$lib/server/services/types'; import type { Actions, PageServerLoad } from './$types'; @@ -37,8 +36,8 @@ export const load: PageServerLoad = async ({ params, url }) => { .where(eq(categories.id, item.categoryId)) : [null]; - const refs = await loadForGrocery(id); - const cats = await loadCategories(); + const refs = await referencesService.loadForGrocery(id); + const cats = await categoriesService.loadAll(); const from = url.searchParams.get('from') || '/'; return { @@ -65,12 +64,25 @@ export const actions: Actions = { return fail(400, { error: 'La référence est requise' }); } - await addRef(groceryId, reference, price, unit, qualityScore); + await referencesService.add( + groceryId, + reference, + price, + unit, + qualityScore, + ); return { success: true, type: 'add' as const }; }, delete: ({ request }) => - deleteByIdAction(request, deleteReference, { type: 'delete' }), + idAction(request, (id) => referencesService.deleteReference(id), { + type: 'delete', + }), + + promote: ({ request }) => + idAction(request, (id) => referencesService.promote(id), { + type: 'promote', + }), update: async ({ request, params }) => { const data = await request.formData(); @@ -83,13 +95,20 @@ export const actions: Actions = { return fail(400, { error: 'Le nom est requis' }); } - await updateGrocery(groceryId, name, categoryId); + try { + await groceriesService.updateGrocery(groceryId, name, categoryId); + } catch (error) { + if (isUniqueViolation(error)) { + return fail(400, { error: 'Un article porte déjà ce nom' }); + } + throw error; + } return { success: true, type: 'update' as const }; }, deleteItem: async ({ params, request }) => { const groceryId = numericId(params.id); - await deleteGrocery(groceryId); + await groceriesService.deleteGrocery(groceryId); const data = await request.formData(); const from = parseFormString(data.get('from')) || '/'; throw redirect(303, from); |
